Lecture 7 - Practice

Lecture 7 - Practice

1. إخراج البيانات (Output with write)

?- write('Hello'), nl.
Hello
true.

?- write(123), nl.
123
true.

?- X = 5, write('X = '), write(X), nl.
X = 5
X = 5.

?- write('Today'), write(' is '), write('great'), nl.
Today is great
true.

?- write('Result: '), write(42), nl.
Result: 42
true.

nl بيعمل new line (سطر جديد).

2. إدخال البيانات (Read Input)

go :-
    write('Enter your name: '),
    read(Name),
    write('Hello, '), write(Name), nl.
?- go.
Enter your name: ahmed.
Hello, ahmed
true.

مهم: لازم تكتب الاسم وبعده نقطة . لأن read بتستنى نقطة.

3. مكعب الرقم (Cube of a Number)

cube :-
    write('Enter a number: '),
    read(N),
    C is N * N * N,
    write('Cube is '), write(C), nl.
?- cube.
Enter a number: 5.
Cube is 125
true.

?- cube.
Enter a number: -3.
Cube is -27
true.

4. مكعب الرقم بشرط التوقف (Cube with Stop Condition)

cube_stop :-
    write('Enter number (0 to stop): '),
    read(N),
    (N =:= 0 ->
        write('Goodbye!'), nl
    ;
        C is N * N * N,
        write('Cube is '), write(C), nl,
        cube_stop
    ).
?- cube_stop.
Enter number (0 to stop): 3.
Cube is 27
Enter number (0 to stop): 4.
Cube is 64
Enter number (0 to stop): 0.
Goodbye!
true.

5. جمع رقمين (Sum of Two Numbers)

sum

sum :-
    write('Enter first number: '),
    read(A),
    write('Enter second number: '),
    read(B),
    S is A + B,
    write('Sum = '), write(S), nl.

sum2 (باستخدام loop)

sum2 :-
    write('Enter first (0 to stop): '),
    read(A),
    (A =:= 0 -> write('Bye'), nl
    ;
        write('Enter second: '),
        read(B),
        S is A + B,
        write('Sum = '), write(S), nl,
        sum2
    ).
?- sum.
Enter first number: 10.
Enter second number: 20.
Sum = 30
true.

6. دالة بشروط (Function with Conditions)

process :-
    write('Enter X: '),
    read(X),
    cond(X, Y),
    write('Y = '), write(Y), nl.

cond(X, Y) :-
    X < 0, !,
    Y is X * X.

cond(X, Y) :-
    X =:= 0, !,
    Y = 0.

cond(X, Y) :-
    Y is X + 5.
?- process.
Enter X: -3.
Y = 9
true.

?- process.
Enter X: 0.
Y = 0
true.

?- process.
Enter X: 7.
Y = 12
true.

7. الجذر التربيعي (Square Root)

sqrt_num :-
    write('Enter a number: '),
    read(N),
    (N < 0 ->
        write('Error: negative number'), nl
    ;
        R is sqrt(N),
        write('Square root = '), write(R), nl
    ).
?- sqrt_num.
Enter a number: 16.
Square root = 4
true.

?- sqrt_num.
Enter a number: -5.
Error: negative number
true.

8. تقدير درجات الطلاب (Student Marks)

من غير Cut

grade(Marks) :-
    Marks >= 90, write('A').
grade(Marks) :-
    Marks >= 80, write('B').
grade(Marks) :-
    Marks >= 70, write('C').
grade(Marks) :-
    Marks >= 60, write('D').
grade(_) :-
    write('F').

مشكلة: لو Marks=95:

بـ Cut

grade_cut(Marks) :-
    Marks >= 90, !, write('A').

grade_cut(Marks) :-
    Marks >= 80, !, write('B').

grade_cut(Marks) :-
    Marks >= 70, !, write('C').

grade_cut(Marks) :-
    Marks >= 60, !, write('D').

grade_cut(_) :-
    write('F').
?- grade_cut(85).
B
true.

?- grade_cut(95).
A
true.

?- grade_cut(55).
F
true.

الـ Cut بيأمن إنه لو أول قاعدة نجحت، ميروحش يجرب الباقي.

9. تقدير الطلاب مع الاسم (Student Marks with Name)

student_grade :-
    write('Enter student name: '),
    read(Name),
    write('Enter marks: '),
    read(Marks),
    grade_cut(Marks),
    write(' for '), write(Name), nl.
?- student_grade.
Enter student name: ahmed.
Enter marks: 92.
A for ahmed
true.

?- student_grade.
Enter student name: sara.
Enter marks: 73.
C for sara
true.

10. القسمة مع التحقق من الصفر (Division with Zero Check)

safe_div :-
    write('Enter numerator: '),
    read(A),
    write('Enter denominator: '),
    read(B),
    (B =:= 0 ->
        write('Error: division by zero'), nl
    ;
        R is A / B,
        write('Result = '), write(R), nl
    ).
?- safe_div.
Enter numerator: 10.
Enter denominator: 2.
Result = 5
true.

?- safe_div.
Enter numerator: 7.
Enter denominator: 0.
Error: division by zero
true.
Powered by Forestry.md